home *** CD-ROM | disk | FTP | other *** search
- % File: TeX Inputs Cell2.tex
- % Author: J E Pittman
- % Bitnet: JEPTeX@TAMVenus
- % Internet: JEPTeX@Venus.TAMU.EDU
- % Date: November 8, 1988
- %
- % Prepare to scan the data, taking notes as to span sizes, row and
- % column dimensions, et cetera.
- %
- \catcode`_=11 % Used to protect local control sequence names.
- %
- % The span info tokens contain sets of entries of the form \process
- % {position}{number}{dimension}, where position is the terminal column
- % or row, number is the number of columns or rows leading into the
- % column or row, and dimension is the size of the information.
- %
- \declaretoks\column_span_info
- \column_span_info={}%
- \declaretoks\row_span_info
- \row_span_info={}%
- %
- \let\process=\relax
- %
- \declarecount\column_number
- \column_number=0
- %
- % Create a column information entry and put the user's specifications
- % into it.
- %
- \def\column#1{\relax
- \advance\column_number \by 1
- \last_column=\column_number
- \get_column_number_data
- \add_column_number_data {#1}%
- \ignorespaces
- }%
- %
- \declarecount\row_number
- \row_number=0
- %
- % Same as \column.
- %
- \def\row#1{\relax
- \advance\row_number \by 1
- \message{Scanning row \the\row_number.}%
- \last_row=\row_number
- \everyrow
- \get_row_number_data
- \add_row_number_data {#1}%
- \column_number=0
- \ignorespaces
- }%
- %
- % \blank is used to generate a cell without a border or data. In this
- % context, all it does is absorb merges.
- %
- \def\blank{\relax
- \advance\column_number \by 1
- \if\column_number>\last_column
- \advance\column_number \by -1
- \column{}%
- \fi
- \everycolumn
- \get_column_number_data
- \ifnum\merge_rows>1
- \add_column_number_data {\merge_rows=0\relax}%
- \fi
- \merge_columns=0
- }%
- %
- % \cell is used to generate a normal, ruled cell. In this context, it
- % merely measures the cell and makes the appropriate notes.
- %
- \def\cell#1{\relax
- \advance\column_number \by 1
- \if\column_number>\last_column
- \advance\column_number \by -1
- \column{}%
- \fi
- \everycolumn
- \get_column_number_data
- %
- % Typeset the information into temp box.
- %
- \setbox\temp_box=\vbox \bgroup
- \begingroup
- \ifnum\merge_rows>0
- \advance\row_number \by -\merge_rows
- \get_row_number_data
- \fi
- \vskip \topborderskip
- \endgroup
- \hbox \bgroup
- \begingroup
- \ifnum\merge_columns>0
- \advance\column_number \by -\merge_columns
- \get_column_number_data
- \fi
- \hskip \leftborderskip
- \endgroup
- #1\vphantom{)}%
- \hskip \rightborderskip
- \egroup
- \vskip \bottomborderskip
- \egroup
- %
- % If it is a row merger, record it for later processing.
- %
- \ifnum \merge_rows>0
- \edef\temp{\process
- {\the\merge_rows}{\the\ht\temp_box}{\the\row_number}%
- \the\row_span_info
- }%
- \x_after\row_span_info\x_after=\x_after{\temp}%
- % \message{\string\row_span_info=\the\row_span_info}% debug
- \add_column_number_data {\merge_rows=0\relax}%
- \else
- %
- % Not a merger, record the height if max.
- %
- \ifdim\ht\temp_box>\rowheight
- \let\info=\relax
- \edef\temp{\the\row_number>\info
- {\rowheight=\the\ht\temp_box\relax}}%
- \let\info=\row_info
- \x_after \add_data \temp
- % \message{\string\row_info=\the\row_info}% debug
- \rowheight=\ht\temp_box
- \fi
- \fi
- %
- % Same as above for column merger and width.
- %
- \ifnum \merge_columns>0
- \edef\temp{\process
- {\the\merge_columns}{\the\wd\temp_box}{\the\column_number}%
- \the\column_span_info
- }%
- \x_after\column_span_info\x_after=\x_after{\temp}%
- % \message{\string\column_span_info=\the\column_span_info}% debug
- \merge_columns=0
- \else
- \ifdim\wd\temp_box>\columnwidth
- \let\info=\relax
- \edef\temp{\the\column_number>\info
- {\columnwidth=\the\wd\temp_box\relax}}%
- \let\info=\column_info
- \x_after \add_data \temp
- % \message{\string\column_info=\the\column_info}% debug
- \fi
- \fi
- }%
- %
- % \mergeright specifies that the corresponding position is to be
- % merged with the cell to its right.
- %
- \def\mergeright{\relax
- \advance\column_number \by 1
- \if\column_number>\last_column
- \advance\column_number \by -1
- \column{}%
- \fi
- \everycolumn
- \get_column_number_data
- \advance\merge_columns \by 1
- %
- % Cancel a row merge, if present.
- %
- \ifnum\merge_rows>1
- \add_column_number_data {\merge_rows=0\relax}%
- \fi
- }%
- %
- % Same as \mergeright, except down.
- %
- \def\mergedown{\relax
- \advance\column_number \by 1
- \if\column_number>\last_column
- \advance\column_number \by -1
- \column{}%
- \fi
- \everycolumn
- \get_column_number_data
- \add_column_number_data {\advance\merge_rows \by 1\relax}%
- \merge_columns=0
- }%
- %
- % The horizontal and vertical stretch macros allow the user to specify
- % an explicit stretch that will subsequently be processed like a span.
- % User-specified stretches are processed after span caused ones. The
- % parameters are the starting column/row, the ending column/row, and
- % the size of the stretch.
- %
- \def\horizontalstretch#1#2#3{\relax
- \temp_count=#2\relax
- \advance\temp_count \by -#1\relax
- \edef\temp{\the\column_span_info\process{\the\temp_count}{#3}{#2}}%
- \x_after \column_span_info\x_after=\x_after{\temp}%
- % \message{\string\column_span_info=\the\column_span_info}% debug
- \ignorespaces
- }%
- %
- \def\verticalstretch#1#2#3{\relax
- \temp_count=#2\relax
- \advance\temp_count \by -#1\relax
- \edef\temp{\the\row_span_info\process{\the\temp_count}{#3}{#2}}%
- \x_after \row_span_info\x_after=\x_after{\temp}%
- % \message{\string\row_span_info=\the\row_span_info}% debug
- \ignorespaces
- }%
- %
- \def\noalign#1{\ignorespaces}% don't do anything for the first pass
- %
- \catcode`_=8 % Return to normal.
- %
- \endinput
-